Ergebnis 1 bis 3 von 3

Thema: [nodeJS] requestjs in Schleife

Hybrid-Darstellung

  1. #1
    VIP Team
    Registriert
    May 2015
    Beiträge
    1,024
    Gefällt mir!
    862
    Du gefällst: 374

    [nodeJS] requestjs in Schleife

    Hey,

    ich versuche seit zwei Tagen irgendwie mein kleines Nodejs Programm zum laufen zu bekommen.

    Ziel ist mit Hilfe von youtube-dl (Python) einer Menge Proxies und requests JS erstmal 1000 "Videos" von Streamcloud zu saugen.

    Meine Applikation beginnt mit dem Import der benötigten Libs

    Code:
    var fs = require('fs');
    fs.debug = true;
    const request = require('request');
    request.debug = true;
    var glob = require("glob");
    //const { spawn } = require('child_process');
    var spawn = require('child_process').spawnSync;
    const url = require('url');
    var getSlug = require('speakingurl');
    var path = require('path');
    var async = require("async");
    gefolgt vom laden der proxies aus einer text datei

    Code:
    var proxies = [];
    var proxyList = fs.readFileSync('proxies.txt', 'utf8');
    proxyList.split(/\r?\n/).forEach(function(proxy){
    	
    	let $proxy = {};
    	
    	$proxy = proxy.replace('name',  'SuperVIP*****');
    	$proxy = $proxy.replace('pass',  'Df****');
    	
    	proxies.push($proxy);
    
    });
    Es folgt eine einfache Funktion die mir einen Proxie zurückgibt

    Code:
    function proxy(){
    	return proxies.shift();
    }
    Es folgt die Funktion download die den direkt download link ermittelt und den download durchführt

    Code:
    function download(link, savepath){
    	
    	$proxy = proxy();
    	var child = spawn('youtube-dl' , ['-g', "--proxy", $proxy, link]);
        
    	console.log('stdout here: \n' + child.stdout);
    	console.log('stderr here: \n' +  child.stderr);
    	
    	$output = child.stdout.toString().replace(/\s/g, '');
    	
    	if(url.parse($output)){
    		//request.defaults({'proxy': $proxy});
    		
    		let r = request({
    			'url': $output,
    			'proxy': $proxy,
    			'rejectUnauthorized': false
    		});
    		
    		r.on('error', function(err) {
        console.log(err)
      })
           
    		r.on('response',  function (res) {
    			console.log(savepath+path.extname($output));
    			res.pipe(fs.createWriteStream(savepath+path.extname($output),{flags: 'w+'}));
    		});
    		r.end();
    		
    		/*
    		var file = fs.createWriteStream(savepath+path.extname($output), {flags:'w+',mode: 0666});
    		file.on('error', function(err){
    			console.log(err);
    		});
    		request
    		.get($output)
    		.on('error', function(err) {
    			console.log(err)
    		})
    		.on('data', function(chunk){
    			file.write(chunk);
    		})
    		.on('end', function(){
    			file.close();
    		})
    		.end();
    		*/
    		return savepath+path.extname($output);
    	   
    	}
    		
    	
    }
    Diese Funktion funktionierte (in irgend einer Version) mal, aber nur wenn man den Download einzeln durchführte.

    Ich hatte es irgendwann am Tag mal so probiert

    Code:
    glob("input/*.json", function(err, files) { 
    	if(err) {
    		console.log("cannot read the folder, something goes wrong with glob", err);
    	}
    	files.forEach(function(file){
    	  
    		var entity = JSON.parse(fs.readFileSync(file, 'utf8'));
    		entity.paths = [];
    		
    		if(entity.links['streamcloud.eu'].length == 1){
    			
    			$savepath = path.resolve(__dirname, 'storage/'+getSlug(entity.title, {lang: 'de'}));
    			
    			$path = download(entity.links['streamcloud.eu'][0], $savepath);
    			entity.paths.push($path); 
    			
    		}
    		fs.writeFileSync(file.replace('input', 'output'), JSON.stringify(entity), 'utf8');
    		
    	});
    
    });

    Jetzt bin ich soweit das mir bekannt ist das requestjs in einer Schleife nicht funktioniert. Irgendwas mit Sockets oder so.

    Gut gibt ja async.js

    Code:
    var q = [];
    glob("input/*.json", function(err, files) { 
    	if(err) {
    		console.log("cannot read the folder, something goes wrong with glob", err);
    	}
    	files.forEach(function(file){
    	  
    		var entity = JSON.parse(fs.readFileSync(file, 'utf8'));
    		entity.paths = [];
    		entity.path = file;
    		entity.download = {path: ''};
    		
    		if(entity.links['streamcloud.eu'].length == 1){
    			
    			entity.download.path = path.resolve(__dirname, 'storage/'+getSlug(entity.title, {lang: 'de'})+'.mp4');
    			//console.log(entity.download.path);
    			entity.url = entity.links['streamcloud.eu'][0];
    			//$path = download(entity.links['streamcloud.eu'][0], $savepath);
    			//entity.paths.push($path); 
    			fs.writeFileSync(file.replace('input', 'output'), JSON.stringify(entity), 'utf8');
    			q.push(requestApi(entity));
    			
    		}
    		
    	});
    
    });
    Code:
    var requestApi = function(data, next){
    	console.log('job triggered');
    	
    	$proxy = proxy();
    	var child = spawn('youtube-dl' , ['-g', "--proxy", $proxy, data.url]);
        
    	console.log('stdout here: \n' + child.stdout);
    	console.log('stderr here: \n' +  child.stderr);
    	
    	$output = child.stdout.toString().replace(/\s/g, '');
    	
    	if(!url.parse($output)){
    		next();
    	}
    	
    	request.defaults({'proxy': $proxy});
    	var file = fs.createWriteStream(data.download.path, {flags:'w+',mode: 0666});
    		request
    		.get($output)
    		.on('error', function(err) {
    			console.log(err);
    			next(err);
    		})
    		.on('data', function(chunk){
    			file.writeSync(chunk);
    		})
    		.on('end', function(){
    			file.close();
    			next();
    		})
    		.end();
    	
    };
    Code:
    async.series(q,  function(err, data){
    		console.log(err);
    	});

    Der Part DDL ermitteln funktioniert

    Code:
    stderr here:
    
    REQUEST { uri: 'http://stor8.streamcloud.eu:8080/5hv75o2easoax3ptxzjijq77vum52hf
    wnab4mmoq6rbxvjtmwc3a4g36r4/video.mp4',
      method: 'GET',
      callback: undefined }
    REQUEST make request http://stor8.streamcloud.eu:8080/5hv75o2easoax3ptxzjijq77vu
    m52hfwnab4mmoq6rbxvjtmwc3a4g36r4/video.mp4
    job triggered
    ^C
    C:\src\downloader>
    Request wird auch gefeuert aber es wird nicht geladen.

    Hat jemand irgendwie Vorschläge.

    Ziel. Den Downloader zum laufen bekommen.

    Btw. Wieso kann man bei streamcloud nicht einfach fremdlinks importieren wie bei openload?

  2. #2
    Junior Avatar von EVXN
    Registriert
    Aug 2017
    Beiträge
    91
    Gefällt mir!
    27
    Du gefällst: 95
    Zitat Zitat von SpongeBob Schwammkopf Beitrag anzeigen
    Btw. Wieso kann man bei streamcloud nicht einfach fremdlinks importieren wie bei openload?
    Marcel spielt mit Openload in einer anderen Liga, da kommt so ein Hoster wie Streamcloud nie wieder ran.

    Zu deinem Problem, du bist dir sicher dass der Download immer mit der gleichen Proxy-IP gestartet wird (kann aus den Codefetzen aktuell nichts brauchbares schließen)
    Lass doch mal youtube-dl debuggen und dir den Log anzeigen (wenn das irgendwie geht), obwohl man dafür glaube ich kein youtube-dl braucht, es sollte normales GET reichen.

  3. #3
    VIP Team
    THEMENSTARTER


    Registriert
    May 2015
    Beiträge
    1,024
    Gefällt mir!
    862
    Du gefällst: 374
    Ich nutze für youtube-dl und requestjs immer den gleichen proxy. Der Download funktioniert auch wenn er einzeln ausgeführt wird.

    "Marcel spielt mit Openload in einer anderen Liga, da kommt so ein Hoster wie Streamcloud nie wieder ran.
    "

    Und nen import von files aus dem eigenen system ist hexenwerk? Das hat ja selbst jedes relativ gutes filehosting script von der stange

Ähnliche Themen

  1. (C#) - Zählvariable einer FOR-Schleife innerhalb der FOR-Schleife setzen
    Von noobee im Forum Entwicklung / Programmierung
    Antworten: 6
    Letzter Beitrag: 12.05.2018, 11:48
  2. (Sonstige) - [NODEJS] Indexer für Dump
    Von darkness im Forum Entwicklung / Programmierung
    Antworten: 1
    Letzter Beitrag: 15.03.2016, 19:14
  3. (PHP) - PHP, Nodejs, Python - Technical Question - Torrents streamen
    Von darkness im Forum Entwicklung / Programmierung
    Antworten: 0
    Letzter Beitrag: 02.09.2015, 21:14

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
SzeneBox.org... im Mittelpunkt der Szene!
© since 2015 szeneBOX.org - All Rights Reserved
Domains: www.szenebox.org